/**
 * 
 */
package com.zte.claa.inficombo.csa.app.service.rptparse.ext.gnss;

import com.zte.claa.inficombo.csa.app.service.rptparse.ext.gnss.mina.msgbean.GnssRequest;

/**
 * @author lyp
 * 
 * LinkedBlockingQueue的特性：
			  	抛异常	 	特定值	       阻塞	              超时
		插入	    add(o)		offer(o)	put(o)		offer(o, timeout, timeunit)
		移除	    remove(o)	poll(o)		take(o)		poll(timeout, timeunit)
		检查		element(o)	peek(o)	 	 
		
		四组不同的行为方式解释：
		抛异常：如果试图的操作无法立即执行，抛一个异常。
		特定值：如果试图的操作无法立即执行，返回一个特定的值(常常是 true / false)。
		阻塞：如果试图的操作无法立即执行，该方法调用将会发生阻塞，直到能够执行。
		超时：如果试图的操作无法立即执行，该方法调用将会发生阻塞，直到能够执行，但等待时间不会超过给定值。
		           返回一个特定值以告知该操作是否成功(典型的是 true / false)。
 *
 */
public class GnssReqExecContext {
	// 是否执行完毕.
	private boolean isExecFinished = false;
	private Throwable retErr = null;
	private String rspMsg = null;
	private GnssRequest req = null;
	
	/**
	 * 
	 */
	public GnssReqExecContext(){
		this.isExecFinished = false;
		// 预设超时异常提示！
		this.retErr = new Exception("命令执行超时！");
		this.rspMsg = null;
	}

	/**
	 * 重置上下文，主要用于批量命令执行的情况》
	 * 
	 */
	public synchronized void resetContext(){
		this.isExecFinished = false;
		this.retErr = new Exception("命令执行超时！");
		this.rspMsg = null;
		this.req = null;
	}
	/**
	 * 执行完成，仅批量执行时会触发
	 * 
	 */
	public synchronized void setFinish() {
		this.isExecFinished = true;
	}

	/**
	 * 执行出现异常
	 * 
	 * @param retErr
	 */
	public synchronized void setRetErr(Throwable retErr) {
		this.isExecFinished = true;
		this.retErr = retErr;
	}

	/**
	 * 设置执行结果
	 * 
	 * @param retMessage  IotmMessage rspMsg
	 */
	public synchronized void setRetMessage(String retMessage) {
		this.isExecFinished = true;
		this.rspMsg = retMessage;
	}

	/**
	 * 
	 * @return
	 */
	public synchronized boolean isExecFinished(){
		return this.isExecFinished;
	}

	public synchronized Throwable getRetErr() {
		return retErr;
	}

	/**
	 * @return the rspMsg
	 */
	public synchronized String getRspMsg() {
		return rspMsg;
	}

	public GnssRequest getReq() {
		return req;
	}

	public void setReq(GnssRequest req) {
		this.req = req;
	}

}
